package br.com.empresa.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import be.com.empresa.modelo.Produto;

public class ProdutoDAO {
	private static String INSERT = "insert into produto (nome, cor, marca, preco, quantidade, codigo) values(?,?,?,?,?,?)";
	private static final String LIST = "select * from produto";
	private static final String DELETE = "delete from produto where codigo = ?";
	private static final String LIST_BY_ID = "select * from produto where codigo = ?";
	private static String UPDATE = "update codigo set nm_forn = ?, razao_forn = ?, inscricao_forn= ? , fone_forn = ?, cnpj_forn = ? where codigo = ?";
	
	public void inserir(Produto produto){
		Connection con = null;
		try {
			con = FabricaConexao.getConexao();
			PreparedStatement pstm = con.prepareStatement(INSERT);
			pstm.setString(1, produto.getNome());
			pstm.setString(2, produto.getCor());
			pstm.setString(3, produto.getMarca());
			pstm.setDouble(4, produto.getPreco());
			pstm.setInt(5, produto.getQuantidade());
			pstm.setInt(6, produto.getCodigo());
			pstm.execute();
			JOptionPane.showMessageDialog(null, "Produto inserido corretamente.");
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro ao inserir um Produto na bese de dados." + e.getMessage());
		}finally{
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public boolean excluir(int codigo){
		Connection con = null;
		try {
			con = FabricaConexao.getConexao();
			PreparedStatement pstm = con.prepareStatement(DELETE);
			pstm.setInt(1, codigo);
			pstm.execute();
			JOptionPane.showMessageDialog(null, "Produto excluido corretamente.");
			return true;
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro ao excluir um Produto na bese de dados." + e.getMessage());
		}finally{
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}return false;
	}
	
	public List<Produto> listar(){
		Connection con = null;
		try {
			con = FabricaConexao.getConexao();
			PreparedStatement pstm = con.prepareStatement(LIST);
			ResultSet rs = pstm.executeQuery();
			List<Produto> produtos = new ArrayList();
			while(rs.next()){
				Produto fornecedor = new Produto();
				fornecedor.setCodigo(rs.getInt("cd_forn"));
				fornecedor.setNome(rs.getString("nm_forn"));
				fornecedor.setPreco(rs.getDouble("fone_forn"));
				produtos.add(fornecedor);
			}
			return produtos;
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro ao listar o Produto." + e.getMessage());
		}finally{
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}return null;
	}
	
	public Produto listarPorId(int codigo){
		Connection con = null;
		try {
			con = FabricaConexao.getConexao();
			PreparedStatement pstm = con.prepareStatement(LIST_BY_ID);
			pstm.setInt(1, codigo);
			ResultSet rs = pstm.executeQuery();
			Produto fornecedor = new Produto();
			while(rs.next()){
				fornecedor.setCodigo(rs.getInt("cd_forn"));
				fornecedor.setNome(rs.getString("nm_forn"));
				fornecedor.setPreco(rs.getDouble("fone_forn"));
			}
			return fornecedor;
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro ao listar o Produto." + e.getMessage());
		}finally{
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}return null;
	}
	
}
